package com.ruoyi.system.service;

import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.system.domain.POrder;
import com.ruoyi.system.domain.bo.POrderBo;
import com.ruoyi.system.domain.vo.POrderVo;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;

/**
 * 咨询订单Service接口
 *
 * @author ruoyi
 * @date 2022-07-25
 */
public interface IPOrderService {

    /**
     * 查询咨询订单
     */
    POrder queryById(Long id);

    /**
     * 查询咨询订单列表
     */
    TableDataInfo<POrder> queryPageList(POrder bo, PageQuery pageQuery);

    /**
     * 查询咨询订单列表
     */
    List<POrderVo> queryList(POrderBo bo);

    /**
     * 修改咨询订单
     */
    Boolean insertByBo(POrderBo bo);

    /**
     * 修改咨询订单
     */
    Boolean updateByBo(POrderBo bo);

    /**
     * 校验并批量删除咨询订单信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 前端-咨询订单新增
     */
    void insertFontByBo(POrderBo bo);

    /**
     * 前端-修改咨询订单状态
     */
    void editStatus(POrder bo);

    /**
     * 前端-咨询支付成功后回调
     */
    void askPayOk(POrder bo);

    /**
     * 前端-测试支付成功后回调
     */
    void testPayOk(POrder bo);

    /**
     * 前端-取消咨询订单
     */
    void cancelOrder(POrder bo);

    /**
     * 前端-查询已有的预约订单
     */
    TableDataInfo<POrder> queryHasTimePageList(POrder bo, PageQuery pageQuery);

    /**
     * 我的-》我的订单
     * @param pageQuery
     * @return
     */
    TableDataInfo<POrder> list(String orderStatus, PageQuery pageQuery);

    /**
     * 订单详情
     * @param OrderNo
     * @return
     */
    POrder orderDetail(String orderNo);

    /**
     * 前端-测试订单
     */
    void insertTestFontByBo(POrderBo bo);

    /**
     * 前端-根据订单号查询详情
     */
    POrder orderFontDetail(String orderNo);

    /**
     * 心理咨询支付成功回调
     */
    void paySuccessCallback(POrderBo pOrderBo);

    /**
     * 消费订单结束增加会员等级
     *
     * @param userId 用户id
     * @param bigDecimal 消费金额
     */
    void upgrade(Long userId, BigDecimal bigDecimal);
}
